package do

import (
	"cqTcp/settings"
	"fmt"
	"log"
	"net"
	"os"

	"github.com/fsnotify/fsnotify"
)

func ListenRe(coon net.Conn, cfg *settings.FilePathConfig) {
	watcher, err := fsnotify.NewWatcher()
	if err != nil {
		fmt.Println("Watcher fatal err:", err)
	}
	defer func(watcher *fsnotify.Watcher) {
		err := watcher.Close()
		if err != nil {

		}
	}(watcher)

	done := make(chan bool)
	// 添加需要监听的文件夹合指定文件名
	filePath := settings.Conf.FilePathConfig.WidteFileName
	if _, err := os.Stat(filePath); os.IsNotExist(err) {
		//如果文件不存在，则创建文件
		file, err := os.Create(filePath)
		if err != nil {
			log.Println("error:", err)
		}
		defer file.Close()
	}
	go func() {
		for {
			select {
			case event, ok := <-watcher.Events:
				if !ok {
					return
				}
				// 检查事件类型、文件名和目标文件名是否匹配
				if event.Op&fsnotify.Write == fsnotify.Write {
					// 读取并发送消息
					readAndSend(coon, filePath)
					// 按行读取所有数据 并进行提交
					//coon.Write()
					fmt.Printf("文件 %s 发生变化： %s \n", event.Name, event.String())
				}
			case err, ok := <-watcher.Errors:
				if !ok {
					return
				}
				log.Println("error:", err)
			}
		}
	}()

	// 监听文件
	err = watcher.Add(filePath)
	if err != nil {
		log.Fatal(err)
	}
	<-done
}
